<?php
/**
 * @package PWE.modele
 * @author Gmax <gmaxfr78@gmail.com>
 */
class modele{
    protected static $_table;
    public $type;
    
    protected function _getResults($sql){
        $result = bdd_sql::doSql($sql);
        if( $result['count']>0 ){
            return $result;
        }
        return false;
    }
    
    protected function _getOneResult($sql){
        $results = $this->_getResults($sql);
        if($results && $results['count']>0 ){
            return $results['results'][0];
        }
        return false;
    }
    /**
     * renvoi le type de modele publication|category|page
     * @return string
     */
    public function getType(){
        return $this->type;
    }
    public function outputFormat($string){
        return encoding::toUTF8(html_entity_decode(stripslashes($string)));
    }
    public function inputFormat($string){
        return encoding::fixUTF8(addslashes(htmlentities(encoding::toUTF8($string))));
    }
    public function formatLink($link){
        $link = $this->urlize($link);
        if(substr($link,0,7)==='http://'){
            return $link;
        }else{
            $link = (substr($link,0,1)==='/')?substr($link,1):$link;
            return PWE::getBaseURL().$link;
        }
    }
    public function urlize($string){return $string;}
    public function getDescriptionSEO(){return '';}
    public function getTitreSEO(){return '';}
    public function getDatas(){}
    public function setDatas($datas){}
    public function save(){}
    public function update(){}
    public function delete(){}
    public function getTemplate(){ return PWE::getDefaultTemplate(); }
    public function getCategory(){ return modele_category::findByPermalien(PWE::getOrigineCategory()); }
    
    public function addMedia($mediaId){}
    public function removeMedia($mediaId){}
    
    /**
     * undique si l'objet à une galerie attachée
     * @return boolean
     */
    public function haveSlider(){
        $slider = modele_galerie::findByPermalien('galerie-'.$this->type.'-'.$this->getId().modele_permalien::getExtensionByModele('galerie'), 'galerie');
        return ($slider!==null)?$slider:false;
    }
    
    
    public function debug($obj){
        if(is_object($obj)||  is_array($obj) ){
            echo '<pre>';
            print_r($obj);
            echo '</pre>';
        }else{
            echo $obj;
        }
        exit;
    }
    
    /*methodes statiques*/
    /**
     * 
     * @return string
     */
    public static function getTable(){return '';}
    /**
     * renvoi le modele correspondnat au permalien
     * si $modele est précisé, la recherche ne porte que sur ce type de modele
     * si $redirectionAuto == true, les redirection sont verifiés pour trouver le modele
     * 
     * @param string $permalien
     * @param string $modele
     * @param boolean $redirectionAuto
     * @return /modele
     */
    public static function findByPermalien($permalien,$modele='',$redirectionAuto=true){
        $sqlQuery = 'SELECT modele_id AS id, modele AS modele FROM '.modele_permalien::getTable().' WHERE lien="'.$permalien.'"';
        if($modele!=='') $sqlQuery .= ' AND modele="'.$modele.'"';
        $sqlQuery .= ' LIMIT 1';
        $results = bdd_sql::doSql($sqlQuery,true);
        $retour = null;
        if($results['count']===1){
            eval('$retour = new modele_'.$results['results'][0]['modele'].'('.$results['results'][0]['id'].');');
            if($retour!==null && $retour->type==='category' && $retour->isPage()){
                $publications = $retour->getPublications();
                $retour = $publications[0];
            }
        }
        
        /* si le modele n'est pas trouvé, vérifier les redirections */
        if($retour===null&&$redirectionAuto){
            $redirection = new modele_redirection($permalien);
            $retour = ($redirection!==null)?$redirection->getTargetObject():null;
        }
        
        return $retour;
    }
}